package cn.lhjl.day04.note;
/*
* extends继承或者implement实现，是多态性的前提。
* 例如小明是一个对象
* 这个对象既是学生形态，也是人类形态。
* 一个对象用来多种形态，也就是：对象的多态性。
* 重要： 代码当中体现多态性，其实就是一句话：父类引用指向子类对象。
*
* 格式：
* 父类名称 对象名 = new 子类名称（）;
* 或者：
* 接口名称 对象名 = new 子类名称（）；
*
* 在多态代码中，成员方法和成员变量的访问规则是：
*   成员变量：编译看左边，运行看左边。
*   成员方法：编译看左边，运行看右边。
*
* 1.对象的向上转型，其实就是多态写法：
* 格式：父类名称 对象名 = new 子类名称（）；
* 含义：右侧创建一个子类对象，把他当做父类来看待使用。
* 注意事项：向上转型一定是安全的。从小范围转向了大范围。
* 弊端：对象一旦向上转型为父类，那么就无法调用子类原本特有的内容。
* 解决方案：把已经向上转型的对象还原为原本类型，也就是向下转型。
* 对象的向下转型，其实是一个【还原】动作。
* 格式 子类名称 子类对象名 = （子类名称） 父类对象
* 含义：将父类对象，【还原】成为本来的子类对象。
* 例如：
* Animal animal = new Cat();//本来是猫，向上转型为动物。
* Cat cat = （Cat）animal；本来是猫，已经被当做动物了，还原成为本来的猫
* 注意事项：
* a.必须保证对象本来创建的时候，就是猫，才能向下转型成为猫。
* b.如果对象创建的时候本来不是猫，非要向下转型成为猫，就会报错。ClassCastException（类型转换异常）
*
* 所以带来一个问题，那就是我们需要知道一个父类引用指向的对象，本来是什么子类。
* 用instanceof 关键字来解决
* 格式：
* 对象名 instanceof 类名称
* 这将会得到一个boolean值结果，也就是判断前面对象能不能当做后面类型的实例
* 做法：
* Animal animal = new Dog();
* if(animal instanceof Dog){
*    Dog dog =(Dog) animal
* }
* 练习：Usb接口案例
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* */
public class 多态 {
}
